package com.xy.api.model.dto.calculate.lirun.temu;

import lombok.Data;
import org.springframework.util.Assert;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;

@Data
public class TemuLirunProductFormDTO implements Serializable {

    private Long id;

    // 关联的产品利润核算表ID (t_temu_lirun_product#id)
    private Long temuLirunProductId;

    //变体1值
    private String variantCodeOneValue;

    //变体2值
    private String variantCodeTwoValue;

    // 产品长度
    private BigDecimal productLength;

    // 产品宽度
    private BigDecimal productWidth;

    // 产品高度
    private BigDecimal productHeight;

    // 装箱量
    private Integer outerCartonPackCount;

    // 装箱长度
    private BigDecimal packetLength;

    // 装箱宽度
    private BigDecimal packetWidth;

    // 装箱高度
    private BigDecimal packetHeight;

    // Temu报价
    private BigDecimal temuQuotePrice;

    // am售价
    private BigDecimal amPrice;

    // 采购成本-含税（单位是人民币）
    private BigDecimal purchaseCost;

    // 退款占比
    private BigDecimal refundPer;

    // 折让占比
    private BigDecimal discountPer;

    // 单个产品净重
    private BigDecimal productWeight;

    // 单个产品包装重
    private BigDecimal packageWeight;

    // 贴标费用
    private BigDecimal tagCost;

    // 单件杂费，默认值为0.00
    private BigDecimal perItemMiscellaneousCost;

    // 配置费，默认值为0.00
    private BigDecimal setupCost;

    // 头程运费
    private BigDecimal internationalShippingCost;

    // 仓储-海外仓
    private BigDecimal foreignWarehouseStorage;

    // 创建人
    private Long createBy;

    // 更新人
    private Long updateBy;

    // 创建时间，默认当前时间戳
    private Date createTime;

    // 更新时间，默认当前时间戳并在每次更新时自动更新
    private Date updateTime;

    // 是否删除，默认值为false表示未删除
    private Integer isDeleted;

    // 佐川
    private TemuLirunProductInstanceDTO zuochuanInstance;

    // across
    private TemuLirunProductInstanceDTO acrossInstance;

    /**
     * 计算前校验
     */
    public void validateBeforeCalculate(){
        Assert.notNull(productLength, "产品长度不能为空");
        Assert.notNull(productWidth, "产品宽度不能为空");
        Assert.notNull(productHeight, "产品高度不能为空");
        Assert.notNull(outerCartonPackCount, "装箱量不能为空");
        Assert.notNull(packetLength, "装箱长度不能为空");
        Assert.notNull(packetWidth, "装箱宽度不能为空");
        Assert.notNull(packetHeight, "装箱高度不能为空");
        Assert.notNull(temuQuotePrice, "TEMU报价不能为空");
        Assert.notNull(purchaseCost, "采购成本-含税（单位是人民币）不能为空");
        Assert.notNull(refundPer, "退款占比不能为空");
        Assert.notNull(discountPer, "折让占比不能为空");
        Assert.notNull(productWeight, "单个产品净重不能为空");
        Assert.notNull(packageWeight, "单个产品包装重不能为空");
    }
}
